package com.oms.core.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * 通用Service业务接口，其他功能Service继承改接口
 * @author Loong_Mit
 * @date Sep 1, 2012 5:41:39 PM
 */

public interface IGeneralService <E, PK extends Serializable>{
	/** 
     * 插入一个实体（在数据库INSERT一条记录）
     * @param entity 实体对象 
     */  
    public void insert(E entity);  

    /** 
     * 修改一个实体对象（UPDATE一条记录） 
     * @param entity 实体对象 
     * @return 修改的对象个数，正常情况=1 
     */  
    public int update(E entity);  

    /** 
     * 按主键删除记录 
     * @param primaryKey 主键对象 
     * @return 删除的对象个数，正常情况=1 
     */  
    public int delete(PK primaryKey);  

    /** 
     * 查询整表总记录数 
     * @return 整表总记录数 
     */  
    public int count();  

    /** 
     * 按主键取记录 
     * @param primaryKey 主键值 
     * @return 记录实体对象，如果没有符合主键条件的记录，则返回null 
     */  
    public E get(PK primaryKey);  

    /** 
     * 取全部记录 
     * @return 全部记录实体对象的List 
     */  
    public List<E> getAll();  

    /** 
     * 批量插入 
     * @param list 
     */  
    public void batchInsert(final List<E> list);  

    /** 
     * 批量修改 
     * @param list 
     */  
    public void batchUpdate(final List<E> list);  

    /** 
     * 批量删除 
     * @param list 
     */  
    public void batchDelete(final List<PK> list);  
    
    /**
     * 通过指定的statementId查询结果集
     * @param sqlId
     * @return
     */
    public List<E> queryForList(String sqlId);   

    /**
     * 按照查询条件查询符合条件的全部记录
     * @param sqlId
     * @param parameters
     * @return
     */
    public List<E> queryForList(String sqlId,Object parameters) ;
    
    /**    
     * sql 查询.    
     * @param sql 直接sql的语句(需要防止注入式攻击)    
     */ 
    public List<E> queryForList(String sqlId, String sql);   
    
    /**    
     * map查询.    
    * @param map 包含各种属性的查询    
     */     
    public List<E> queryForList(String sqlId, Map<String, Object> map);
    
    /**
     * 按照查询条件查询符合条件的记录
     * @param sqlId
     * @param parameters
     * @return
     */
    public E queryForObject(String sqlId,Object parameters);
    
    /**
     * 按照条件更新符合条件的记录
     * @param sqlId
     * @param parameters
     */
    public void update(String sqlId, Object parameters);
    
    /**
     * 按照条件删除符合条件的记录
     * @param sqlId
     * @param parameters
     */
    public void delete(String sqlId, Object parameters);
}
